#include "app_router.h"
#include "log/log.h"
#include "app_mqtt.h"
#include "app_message.h"
#include <stdlib.h>
#define DEVICE_LIST_SIZE 10
static Device *device_list[DEVICE_LIST_SIZE];
static int device_count = 0;
/**
 * 发送消息
 */
static int router_send_msg(Device *device, char *data, int len)
{
    // 将data数据转换为json格式字符串
    Message *message = app_message_initByBinary(data, len);
    char json[128];
    app_message_toJson(message, json, sizeof(json));
    // 发送消息到服务器
    app_mqtt_send(json, len);
    // 释放消息
    app_message_free(message);
    return 0;
}
static int router_recv_callback(char *json, int len)
{
    // 将json转换为message
    Message *message = app_message_initByJson(json);
    // 查找对应的设备
    for (int i = 0; i < device_count; i++)
    {
        // 当前是通过连接类型来匹配的
        if (message->conn_Type == device_list[i]->conn_type)
        {
            // 将message转换为二进制数据
            char binary[128];
            int len = app_message_toBinary(message, binary, sizeof(binary));
            int result = app_device_recvMessage(device_list[i], binary, len);
            free(message);
            return result;
        }
    }
    log_error("No device found for message");
    return -1;
}
int app_router_init(void)
{
    // 初始化mqtt客户端
    app_mqtt_init();
    // 注册接受消息进行处理的回调
    app_mqtt_registerCallback(router_recv_callback);
    return 0;
}

void app_router_close()
{
    app_mqtt_close();
    // 停止并关闭所有注册的设备
    for (int i = 0; i < device_count; i++)
    {
        app_device_stop(device_list[i]);
        app_device_close(device_list[i]);
    }
}

int app_router_registerDevice(Device *device)
{
    // 如果设备列表已满，返回错误
    if (device_count == DEVICE_LIST_SIZE)
    {
        log_error("Device list is full");
        return -1;
    }
    // 将设备添加到设备列表(先用后加)
    device_list[device_count++] = device;
    // 给设备指定未实现的发送消息的函数
    device->funs->send_message = router_send_msg;
    // 启动设备
    app_device_start(device);
    return 0;
}